《Hive数据仓库工具》 课程实训指导书 适用对象: 软件技术 撰写人: 何永亚 审核人: 苏秀芝 审查人: 蒋新民 审批人: 龚 波 二〇二五 年 二 月 课程名称 hive数据仓库工具 课程代码 0306232 课程计划课时 64 实训课时 32 所占比重 50% 实训目的 紧密围绕以hive大数据技术相关的知识点,考察学生hive的安装配置、Spark开发环境的搭建、hive sql的定义、数据、查询、分区表、分桶表、函数等的相关使用方法、以及使用hive进行大数据分析的常用数据流程与开发步骤。 二、实训要求 本课程主讲教师要求掌握Hadoop生态圈常用组件的搭建和使用,重点掌握hive的安装配置,hive sql的使用相关知识并能熟练应用;根据授课状况合理调整授课进度。学生为大数据工程专业,能准备好相关软件,认真上课,按时完成练习;实训机房应安装有Windows7 64位操作系统及以上版本,使用软件:MySQL8(及以上版本)、Hadoop3.3.1、、Hive3.x、sqoop1.4.7、Rochy linux8、DataEase1.8。 三、实训项目(任务) 序号 实训项目(任务)名称 学时 组织形式 作品形式 1 实训一 Linux环境搭建与准备 2 个人实践 实训报告 2 实训二 Hadoop安装与配置(一) 2 个人实践 实训报告 3 实训三 Hadoop安装与配置(二) 2 个人实践 实训报告 4 实训四 hive的安装部署(一) 2 个人实践 实训报告 5 实训五 hive的安装部署(二) 2 个人实践 实训报告 6 实训六 DDL数据定义 2 个人实践 实训报告 7 实训七 DML数据操作 2 个人实践 实训报告 8 实训八 查询操作 2 个人实践 实训报告 9 实训九 分区表和分桶表 2 个人实践 实训报告 10 实训十 函数的使用 2 个人实践 实训报告 11 实训十一 hive sql综合训练(一) 2 个人实践 实训报告 12 实训十二 hive sql综合训练(二) 2 个人实践 实训报告 13 实训十三 教育大数据分析平台(一) 2 个人实践 实训报告 14 实训十四 教育大数据分析平台(二) 2 个人实践 实训报告 15 实训十五 教育大数据分析平台(三) 2 个人实践 实训报告 16 / / / / 17 / / / / 18 / / / / 19 / / / / 填写说明:① 组织形式:可选择个人实践、小组合作、项目竞赛等;② 作品形式:实训报告、实物制作、方案、源代码等。 四、评价参考标准 评分标准 90-100分 80-89分 70-79分 60-69分 <60 到训情况(25%) 遵守纪律,无迟到早退,到课率95%以上。 遵守纪律,迟到早退次数1-2次,到课率93%以上。 遵守纪律,迟到早退次数不超过3次,到课率90%以上。 基本上能遵守纪律,迟到早退次数不超过5次,到课率80%以上。 不遵守纪律,实习态度差,经常迟到或早退,到课率不足50%。 实训表现(25%) 态度良好,表现积极,学以致用,分析解决问题的思路清晰正确。 态度较好,表现比较积极,能学以致用,分析解决问题的思路基本清晰正确。 态度较好,表现一般,分析解决问题的思路能力一般。 态度尚可,表现一般,分析解决问题的思路能力尚不足。 态度不好,表现较差,不能按规定完成任务操作。 完成提交的作品(50%) 按时完成,要素齐全,步骤完整,形式美观,思路正确,无差错。 按时完成,要素较齐全,步骤较完整,形式尚可,思路无误,无明显错误。 按时完成,要素基本齐全,步骤缺失较少,形式正常,思路一般,错误较少。 基本能按时完成,要素有缺失,步骤需补充,形式尚可,思维能力有待提高。 不能按时完成,要素缺失,步骤不完善,形式不达标,思路混乱,错误较多。 实训一 Linux环境搭建与准备 一、实训目的 1.1 掌握VMware workstation的安装方法 1.2 创建虚拟机 1.3 掌握 rochy linux8的安装方法 1.4 掌握linux常用设置的方法 二、实训内容 2.1 VMware Workstation 安装部署 VMware Workstation 安装步骤: (1)双击运行安装包程序双击运行安装包,弹出图1-1的安装界面,点击下一步。 图1-1 双击运行安装包程序 (2)弹出图1-2所示界面勾选“我接受许可协议中的条款”,点击下一步按钮。 图1-2 接受许可证协议 (3)弹出图1-3界面,选择一个具体的安装位置(建议非中文无空格),选择增强型键盘驱动程序(可不选),点击下一步按钮。 图1-3 选择安装位置 (4)弹出图1-4所示界面,用户可以按照自身使用习惯勾选产品更新和客户体验提升计划,需要可以勾选相应选项,这里我们不勾选,点击下一步按钮。 图1-4 用户体验设置 (5)弹出图1-5界面,勾选“桌面”、“开始菜单程序文件夹” 可以创建相应的快捷方式,然后点击下一步按钮。 图1-5 创建快捷方式 (6)弹出图1-6所示界面,点击安装按钮,程序将开始安装。 图1-6 开始安装 (7)弹出如图1-7所示界面,耐心等待进度条完成,然后点击下一步按钮。 图1-7 等待安装 (8)弹出图1-8所示界面, 输入有效的秘钥,然后点击输入按钮。 图1-8 输入秘钥 (9)弹出图1-9所示界面,点击完成按钮,完成程序的安装。 图1-9 完成安装 2.2创建虚拟机 创建虚拟机步骤: (1)如图1-10所示,打开VMware工作界面,点击创建新的虚拟机按钮创建新的虚拟机。 图1-10 创建新的虚拟机 (2)弹出图1-11所示界面,选择自定义的类型进行安装,然后点击下一步按钮。 图1-11 选择安装方式 (3)弹出图1-12所示界面,选择虚拟机硬件兼容性,这里我们选择默认即可,不需要做任何修改,直接下一步按钮。 图1-12 选择虚拟机硬件兼容性 (4)弹出如图1-13所示界面,我们选择稍后安装操作系统,点击下一步按钮。 图1-13 选择客户端操作系统安装 (5)弹出图1-14所示界面,我们选择Linux操作系统,版本为Red Hat Enterprise linux8 64位,然后点击下一步按钮。 图1-14 选择客户端操作系统类型 (6)弹出如图1-15所示界面,我们命名虚拟机名称,选择虚拟机文件的存储文字,然后点击下一步按钮。 图1-15 修改虚拟机名称 (7)弹出图1-16所示界面,输入处理器的数量,以及每个处理器的内核数量,我们可以根据实际情况填写,这里我们将处理器数量,以及每个处理器内核数量配置为1,然后点击下一步按钮。 图1-16 处理器配置 (8)弹出图1-17所示界面,进行虚拟机内存分配,我们可以根据机器自身情况分配,这里我们分配4096mb,然后点击下一步按钮。 图1-17 虚拟机内存配置 (9)弹出图1-18网络类型选择,我们选择使用网络地址转换(NAT),然后点击下一步按钮。 图1-18 网络类型选择 (10)弹出图1-19所示界面,进行I/O控制器类型选择,选择推荐即可,点击下一步按钮。 图1-19 10选择I/O控制器类型 (11)弹出图1-20所示界面,选择磁盘类型,选择推荐的即可,然后点击下一步按钮。 图1-20 选择磁盘类型 (12)弹出如图1-21所示界面,我们选择创建新虚拟机磁盘,点击下一步按钮。 图1-21 选择创建新的虚拟磁盘 (13)弹出如图1-22所示界面,指定磁盘容量为40GB,空间分配方式为“将虚拟磁盘拆分为多个文件”,点击下一步。 图1-22 指定磁盘容量 (14)弹出如图1-23所示界面,我们可以指定虚拟机的磁盘文件,这里我们设定文件名为hadoop1.vmdk,点击下一步按钮。 图1-23 指定磁盘文件 (15)弹出如图1-24所示界面,点击完成按钮完成虚拟机的创建。 图1-24 完成创建虚拟机 2.3安装rochy linux8系统 安装rochy linux8系统步骤: (1)如图1-25所示,打开VMware软件,双击光驱图标,加载rochy linux8的镜像文件。 图1-25 添加Rochy linux8镜像文件 (2)如图1-26所示,点击开启虚拟机按钮启动虚拟机。 图1-26 启动虚拟机 (3)进入如图1-27所示界面,系统进入倒计时,鼠标点进去,键盘上下键可以选择,选择Install Rochy Linux 8.10 ,然后回车即可。 备注:Ctrl+Alt可以实现Windows主机和VM之间窗口的切换。 图1-27 回车安装Rochy linux8 (4)进入如图1-28所示界面进行语言选择,强烈要求选择English。 图1-28 语言选择 (5)完成语言选择后进入如图1-29所示界面,选择系统键盘,这里选择English,然后点击“done”按钮。 图1-29 选择系统键盘 (6)点击时钟按钮进入选择日期和时间选择界面,选择好相应的日期和时间,点击“done”按钮具体操作如图1-30所示。 图1-30 设置日期与时间 (7)点击“software selection”按钮弹出软件选择界面,选择基础环境安装类型,我们选择最小化安装,然后点击“done”按钮,具体操作如图1-31所示。 图1-31 软件安装 (8)点击“installation destination”按钮,进入安装位置选择界面,选择默认磁盘,点击“done”按钮,具体操作如图1-32所示。 图1-32 选择安装位置 (9)点击Kdump按钮,进入Kdump界面取消相应选择,然后点击“done”按钮,这样可以提高内存的使用率,具体操作如图1-33所示。 图1-33 关闭 KDUMP (10)点击“network&host name”按钮可以配置网络和主机名配置完成后,点击“done”按钮,具体操作如图1-34所示。 图1-34 配置网络与主机名 (12)点击“root password”按钮,配置root账号密码,这里我们配置为123456,最后点击“done”按钮,。具体操作如图1-35所示。 图1-35 配置root账号密码 (11)仔细检查所有配置确定无误后,点击开始安装按钮,具体操作如图1-36所示。 图1-36 检查所有配置开始安装 (13)如图1-37所示,Rochy linux8开始安装,我们耐心等待进度条完成。 图1-37 等待系统安装 (14)如图1-38所示,安装完成后,点击Reboot System按钮重启虚拟机。 图1-38 安装完成,重启虚拟机 (15)如图1-39所示,系统进入到登录界面,输入密码完成登录。 图1-39 登录Rochy linux8系统 至此,Rochy linux8系统已经完整完毕,可以开始使用了。 2.4 linux统一设置 2.4.1配置静态IP 在实际应用中,由于我们使用的是DHCP(Dynamic Host Configuration Protocol:动态主机配置协议)服务器来分配的地址,那么每次重启DHCP服务器ip地址有可能是会变动的。 而我们用Linux来搭建集群学习Hadoop的话,是希望IP固定不变的,因为有很多地方会涉及到IP地址的配置,如果IP地址变化就会涉及到很多相关地方的修改,所以我们需要配置静态IP,那么具体如何进行配置呢? (1)如图1-40所示,在vmware中软件点击编辑-虚拟网络编辑器可以查看当前虚拟的网络信息。 1-40查看网络信息 (2)在命令行输入vi /etc/sysconfig/network-scripts/ifcfg-ens160 命令可以配置网卡信息,具体操作与配置如图1-41所示。 1-41 配置静态ip (3)网络信息配置后,需要重启网络服务,如图1-42所示使用命令systemctl restart NetworkManager。 图1-42 重启网络服务 网络服务重启后,我们需要重启虚拟机,如图1-43所示,输入reboot命令进行重启。 1-43 重启虚拟机 (5)重启后,我要检查一下虚拟机是否能够联网,如图1-44所示Ping www.baidu.com,ping一下百度的网址,如果收到回复表示网络联通。 1-44检查网络 2.4.2 x-shell连接工具 由于直接在Linux虚拟机上操作比较不方便,所以我们选择使用第三方远程连接工具X-shell远程连接到Linux虚拟机,然后通过X-shell对Linux虚拟机进行相关操作。 (1)如图1-45所示,通过360应用商店中进行x-shell工具的安装。 1-45 下载安装X-Shell远程连接工具 (2)如图1-46 所示,打开X-Shell工具,点击file——>new——>connection,配置连接。 1-46 设置连接 (3)选择Authentication,配置用户名和密码,具体操作如图1-47所示。 1-47 设置账号密码 (4)在Sessions对话框选中刚刚创建的会话名称(hadoop1),弹出对话框时我们选择接受并保存,具体操作如图1-48所示。 1-48启动会话 2.4.3 FileZilla传输工具 FileZilla是一个免费开源的FTP软件,可以轻松实现文件上传与下载。 (1)如图1-49所示,在360应用商店,搜索FileZilla,我们可以下载安装FileZilla。 图1-49 安装filezilla (2)如图1-50所示,在FileZilla中点击文件-站点管理,然后新建站点,进行配置后,点击连接,在弹出的对话框选择“accept and save”按钮。 图1-50 filezilla连接虚拟机 2.4.4 配置主机名和IP映射 实际上无论是 IP 地址还是主机名都是为了标识一台主机或者服务器。IP地址就是一台主机上网时IP协议分配给它的一个逻辑地址,主机名(hostname)就相当于又给这台机器取了一个名字,可以为主机取各种各样的名字。如果要用这个名字去访问这台主机,那么就需要配置hostname与IP地址之间的对应关系。具体操作如图1-51所示。 图1-51 配置主机名和ip映射 2.4.5关闭Linux防火墙 防火墙是对服务器进行保护的一种服务,但是有时候这种服务会带来很大的麻烦。比如它会妨碍集群间的相互通信,所以就需要关闭防火墙。 我们首先使用systemctl status firewalld命令查看防火墙状态,具体操作如图1-52所示。 图1-52 查看防火墙状态 关闭防火墙需要两步,首先使用systemctl stop firewalld命令停止防火墙,然后使用systemctl disable firewalld命令使防火墙失效,具体操作如图1-53所示。 图1-53 关闭防火墙 2.4.6创建Linux用户和用户组 在Hadoop平台搭建过程中,为了系统安全考虑,一般不直接使用超级用户 root,而是需要创建一个新的用户和用户组。我们使用useradd hadoop命令添加hadoop用户,使用passwd hadoop命令为Hadoop用户配置密码(配置密码:123456),具体操作如图1-54所示。 图1-54 创建hadoop用户和用户组 2.4.7 Linux SSH免密登录 SSH(Secure Shell)是可以在应用程序中提供安全通信的一个协议,通过SSH可以安全地进行网络数据传输,它的主要原理就是利用非对称加密体系,对所有待传输的数据进行加密,保证数据在传输时不被恶意破坏、泄露或者篡改。 但是Hadoop集群使用SSH不是用来进行数据传输的,而是在Hadoop集群启动和停止的时候,主节点需要通过SSH协议启动或停止从节点上面的进程。如果不配置SSH免密登录,对Hadoop集群的正常使用没有任何影响,但是在启动和停止Hadoop集群的时候,需要输入每个从节点的密码。可以想象一下,当集群规模比较大的时候,比如达到成百上千节点的规模,如果每次都要分别输入集群节点的密码,这种方法肯定是不可取的,所以要对Hadoop集群进行SSH免密登录的配置。 (1)如图1-55所示,进入hadoop用户的根目录,使用ssh-keygen -t rsa命令生成密钥对。 图1-55 生成密钥对 (2)如图1-56所示, 使用cd .ssh/进入.ssh目录,然后使用 cp id_rsa.pub authorized_keys命令将公钥文件id_rsa.pub 中的内容拷贝到相同目录下的authorized_keys文件中。 图1-56拷贝公钥文件 (3)如图1-57所示,切换到hadoop用户的根目录,然后为使用chmod 700 .ssh 以及chmod 600 .ssh/*命令分别为.shh目录,以及其子目录文件赋予相应的权限。 图1-57为.ssh目录及文件赋予相应的权限 (4)如图1-58所示,在命令行输入ssh hadoop1登录hadoop1,第一次登录需要输入yes进行确认,第二次以后登录则不需要,此时表明设置成功。 图1-58使用ssh命令登录hadoop1 2.4.8 JDK安装与配置 由于Hadoop框架是由Java语言开发并运行在JVM之上,所以需要在Linux中提前安装JDK环境。另外,安装Hadoop对JDK版本也有要求,由于安装的Linux系统是64位的Rochy linux8系统,所以需要安装与之相对应的64位JDK安装包。针对Linux系统下的JDK具体版本,可以选择目前比较稳定且常用的JDK1.8版本。 安装tar解压工具 [root@hadoop1 ~]# yum install tar -y (2)下载对应版本的jdk-8u141-linux-x64.tar.gz安装包,并上传至hadoop1节点的/home/hadoop/app目录下,JDK安装包所在目录如下所示: [hadoop@hadoop1 app]$ ls jdk-8u141-linux-x64.tar.gz (3)在当前目录下,使用tar命令对JDK进行解压,具体操作如下所示: [hadoop@hadoop1 app]$ tar -zxvf jdk-8u141-linux-x64.tar.gz 为了方便管理多版本JDK,使用ln命令创建JDK软连接,具体操作如下所示。 [hadoop@hadoop1 app]$ ln -s jdk1.8.0_141 jdk (4)在hadoop用户下,使用vi命令打开.bashrc配置文件,配置JDK环境变量,具体添加内容如下所示: [hadoop@hadoop1 app]$ vi ~/.bashrc JAVA_HOME=/home/hadoop/app/jdk CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH export JAVA_HOME CLASSPATH PATH 使用source命令执行.bashrc文件,JDK环境变量才能生效,具体操作如下所示。 [hadoop@hadoop1 app]$ source ~/.bashrc [hadoop@hadoop1 app]$ echo $JAVA_HOME /home/hadoop/app/jdk (4)在hadoop用户下,使用Java命令查看JDK版本号,查看表示jdk安装成功,具体操作如下所示。 [hadoop@hadoop1 app]$ java -version java version "1.8.0_141" Java(TM) SE Runtime Environment (build 1.8.0_141-b15) Java HotSpot(TM) 64-Bit Server VM (build 25.141-b15, mixed mode) 如果打印的信息能查看到JDK版本号,说明JDK安装成功。 实训二 Hadoop安装与配置(一) 一、实验目的 1.1 掌握伪分布安装与配置的的方法 1.2 掌握Hadoop完全分布式环境搭建准备 二、实验内容 (1)Hadoop下载与解压 1)下载对应版本的Hadoop安装包,并上传至hadoop1节点的/home/hadoop/app目录下,安装包所在目录如下所示: [hadoop@hadoop1 app]$ ls hadoop-3.3.1.tar.gz 2)在当前目录下,使用tar 命令解压Hadoop安装包,具体操作如下所示: [hadoop@hadoop1 app]$ tar -zxvf hadoop-3.3.1.tar.gz 3)为了方便管理多版本Hadoop,使用ln命令创建软连接,具体操作如下所示: [hadoop@hadoop1 app]$ ln -s hadoop-3.3.1 hadoop (2)配置Hadoop 在Hadoop安装目录下进入到etc/hadoop目录,修改Hadoop相关配置文件。 1)修改core-site.xml配置文件。 core-site.xml文件主要配置Hadoop的公有属性,具体配置内容如下所示。 [hadoop@hadoop1 hadoop]$ vi core-site.xml fs.defaultFS hdfs://hadoop1:9000 hadoop.tmp.dir /home/hadoop/data/tmp 2)修改hdfs-site.xml 配置文件。 hdfs-site.xml文件主要配置跟HDFS相关的属性,具体配置内容如下所示。 [hadoop@hadoop1 hadoop]$ vi hdfs-site.xml dfs.namenode.name.dir /home/hadoop/data/dfs/name dfs.datanode.data.dir /home/hadoop/data/dfs/data dfs.replication 1 dfs.permissions false 3)修改hadoop-env.sh配置文件。hadoop-env.sh文件主要配置跟hadoop环境相关的变量,这里主要修改JAVA_HOME的安装目录,具体配置内容如下所示。 [hadoop@hadoop1 hadoop]$ vi hadoop-env.sh export JAVA_HOME=/home/hadoop/app/jdk 4)修改mapred-site.xml配置文件。mapred-site.xml 文件主要配置跟MapReduce 相关的属性,这里主要将MapReduce的运行框架名称配置为YARN,具体配置内容如下所示。 [hadoop@hadoop1 hadoop]$ vi mapred-site.xml mapreduce.framework.name yarn yarn.app.mapreduce.am.env HADOOP_MAPRED_HOME=/home/hadoop/app/hadoop mapreduce.map.env HADOOP_MAPRED_HOME=/home/hadoop/app/hadoop mapreduce.reduce.env HADOOP_MAPRED_HOME=/home/hadoop/app/hadoop 5)修改 yarn-site.xml配置文件。 yarn-site.xml文件主要配置跟YARN 相关的属性,具体配置内容如下所示。 [hadoop@hadoop1 hadoop]$ vi yarn-site.xml yarn.nodemanager.aux-services mapreduce_shuffle 6)修改workers配置文件。slaves文件主要配置哪些节点为datanode角色,由于目前搭建的是Hadoop伪分布集群,所以只需要填写当前主机的hostname即可,具体配置内容如下所示。 [hadoop@hadoop1 hadoop]$ vi workers hadoop1 7)配置Hadoop环境变量。在hadoop用户下,添加Hadoop环境变量,具体操作如下所示。 [hadoop@hadoop1 hadoop]$ vi ~/.bashrc JAVA_HOME=/home/hadoop/app/jdk HADOOP_HOME=/home/hadoop/app/hadoop CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH export JAVA_HOME CLASSPATH PATH HADOOP_HOME 使用source命令执行.bashrc文件,才能使Hadoop环境变量生效,具体操作如下所示。 [hadoop@hadoop1 hadoop]$ source ~/.bashrc [hadoop@hadoop1 hadoop]$ hadoop version Hadoop 3.3.1 8)创建Hadoop相关数据目录。在hadoop用户下,创建Hadoop相关数据目录,具体操作如下所示。 [hadoop@hadoop1 hadoop]$ mkdir -p /home/hadoop/data/tmp [hadoop@hadoop1 hadoop]$ mkdir -p /home/hadoop/data/dfs/name [hadoop@hadoop1 hadoop]$ mkdir -p /home/hadoop/data/dfs/data (3)启动Hadoop伪分布集群 1)格式化主节点namenode。在Hadoop安装目录下,使用如下命令对NameNode进行格式化。 [hadoop@hadoop1 hadoop]$ bin/hdfs namenode -format 注意:第一次安装Hadoop集群需要对NameNode进行格式化,Hadoop集群安装成功之后,下次只需要使用脚本start-all.sh一键启动Hadoop集群即可。 2)启动Hadoop伪分布集群。在Hadoop安装目录下,使用脚本一键启动Hadoop集群,具体操作如下所示。 [hadoop@hadoop1 hadoop]$ sbin/start-all.sh 3)查看Hadoop服务进程。通过jps命令查看Hadoop伪分布集群的服务进程,具体操作如下所示。 [hadoop@hadoop1 ~]$ jps 10885 NodeManager 10327 DataNode 10522 SecondaryNameNode 10746 ResourceManager 10171 NameNode 11247 Jps 如果服务进程中包含Resourcemanager、Nodemanager、NameNode、DataNode和SecondaryNameNode等5个进程,这就说明Hadoop伪分布集群启动成功。 4)查看HDFS文件系统。在浏览器中输入http://hadoop1:9870/地址,通过web界面查看HDFS文件系统,具体操作如图1-1示。 图1-1通过web界面查看HDFS文件系统 备注:在windows平台要用hadoop1访问,必须在C:\Windows\System32\drivers\etc\hosts文件中配置,如图1-2所示。 图1-2在hosts文件中配置ip映射 5)查看YARN资源管理系统。在浏览器中输入http://hadoop1:8088/地址,通过web界面查看YARN资源管理系统,具体操作如图1-3所示。 图1-3通过web界面查看YARN资源管理系统 (4)测试运行Hadoop伪分布集群 Hadoop伪分布集群启动之后,我们以Hadoop自带的WordCount案例来检测Hadoop集群环境的可用性。 1)查看HDFS目录。在HDFS shell中,使用ls命令查看HDFS文件系统目录,具体操作如下所示。 [hadoop@hadoop1 hadoop]$ bin/hdfs dfs -ls / 由于是第一次使用HDFS文件系统,所以HDFS中目前没有任何目录和文件。 2)创建HDFS目录。在HDFS shell中,使用mkdir命令创建HDFS文件目录/test,具体操作如下所示。 [hadoop@hadoop1 hadoop]$ bin/hdfs dfs -mkdir /test 3)准备测试数据集。在Hadoop根目录下,新建words.log文件并输入测试数据,具体操作如下所示。 [hadoop@hadoop1 hadoop]$ vi words.log hadoop hadoop hadoop spark spark spark flink flink flink 4)测试数据上传至HDFS。使用put命令将words.log文件上传至HDFS的/test目录下,具体操作如下所示。 [hadoop@hadoop1 hadoop]$ bin/hdfs dfs -put words.log /test 5)运行WordCount案例。使用yarn脚本将Hadoop自带的WordCount程序提交到YARN集群运行,具体操作如下所示。 [hadoop@hadoop1 hadoop]$ bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /test/words.log /test/out 6)查看作业运行状态。在浏览器中输入http://hadoop1:8088/地址,通过web界面查看YARN中作业运行状态,具体操作如图1-4所示。 图1-4通过web界面查看YARN中作业运行状态 如果在YARN 集群的Web界面中,查看到WordCount作业最终的运行状态为SUCCESS,就说明MapReduce程序可以在YARN集群上成功运行。 7)查询作业运行结果。使用cat命令查看WordCount作业输出结果,具体操作如下所示。 [hadoop@hadoop1 hadoop]$ bin/hdfs dfs -cat /test/out/* flink 3 hadoop 3 spark 3 如果WordCount运行结果符合预期值,说明Hadoop伪分布式集群已经搭建成功! 2.2 Hadoop完全分布式环境搭建准备 2.2.1 Linux虚拟机克隆 Linux虚拟机克隆操作步骤如下: (1)如图1-5所示,在VMware中右键点击hadoop1节点,然后选择hadoop1——>管理——>克隆,进入克隆虚拟机向导,点击“下一页”。 图1-5 克隆虚拟机向导 (2)弹出如果1-6所示的克隆源页面,选择“虚拟机中的当前状态”然后点击“下一步”。 图1-6 选择克隆源 (3)弹出如图1-7所示的克隆类型界面,选择“创建见完整克隆”选项,然后点击“下一步”。 图1-7 选择克隆类型 (4)弹出如图1-8所示的界面,我们可以输入虚拟机的名称以及存储位置,然后点击“完成”按钮。 图1-8 输入新虚拟机的名称 (5)弹出如图1-9的克隆进度界面,耐心等待虚拟机克隆进度条完成。 图1-9克隆虚拟机 (6)如图1-10所示,点击“关闭”按钮,完成虚拟机的克隆。 图1-10 完成虚拟机克隆 (7)如图1-11所示,使用与hadoop1相同的账号密码登录hadoop2(用户名:root 密码:123456)。 图1-11 启动登录 2.2.2 网络及工具配置 (1)配置静态IP 配置静态IP步骤如下: 1)如图1-12所示,在命令行输入:vi/etc/sysconfig/network-scripts/ifcfg-ens33命令。 图1-12 配置静态ip(1) 2)如图1-13所示,修改ip地址为192.168.249.162(可根据实际情况配置)。 图1-13 配置静态ip(2) 3)如图1-14所示,使用systemctl restart NetworkManager重启网络服务。 图1-14 重启网络服务 (4)如图1-15所示,输入ping www.baidu.com命令,测试虚拟机是否能够联网,收到回复表示能够联通。 图1-15 测试网络 (2) Xshell连接 Xshell连接步骤如下: 1)如图1-16所示,静态IP地址配置成功之后,可以通过xshell连接克隆之后的虚拟机,在xshell中新建会话,配置好需要连接的虚拟机。 图1-16 配置连接 2)如图1-17所示,然后配置用户身份验证,输入用户名和密码。 图1-17 配置用户身份验证 3)连接配置好的虚拟机,出现图1-18表示连接成功。 图1-18 通过xshell连接 (3) 修改主机名 修改主机名步骤如下: 1)由于是克隆的,主机还是hadoop1,我们需要修改为hadoop2,使用命令vi /etc/hostname修改主机名,具体操作如图1-19所示。 图1-19 修改主机名 2)为了使用主机名进行访问,我们需要配置主机名映射,输入命令vi /etc/hosts配置主机名映射,具体操作如图1-20所示。 图1-20 修改主机名映射 (3)关闭防火墙 关闭防火墙步骤如下: 1)如图1-21所示,使用查看systemctl status firewalld防火墙状态,如果处于“running”状态表示防火墙开启。 图1-21 查看防火墙状态 2)关闭防火墙分两步进行,首先使用命令systemctl stop firewalld停止防火墙,然后使用命令systemctl disable firewalld使防火墙失效,具体操作如图1-22所示。 图1-22 关闭防火墙 注意:由于克隆hadoop1,前面已经关闭防火墙此步骤可以省略,jdk安装也可省略。 (4) FileZilla连接 在FileZilla中新建站点,进行配置,具体操作如图1-23所示。 图1-23 FileZilla连接虚拟机 备注:使用同样步骤克隆hadoop3并配置ip(ip:192.168.249.163)。 (5)配置Hosts文件 1)使用命令vi /etc/hosts配置ip地址映射,具体操作如图1-24所示,(备注:hadoop1、hadoop2、hadoop3节点hosts文件配置一样)。 图1-24 配置Hosts文件 2)测试hadoop1节点访问hadoop2节点,具体操作如图1-25所示。 图1-25 测试节点互访 2.2.3 时钟同步 (1)我们使用命令timedatectl set-timezone "Asia/Shanghai"统一时区为上海时区,具体操作如图1-26所示。 图1-26 统一时区 (2)使用yum -y install chrony命令下载安装 chrony服务,中间遇到提问请输入y,具体操作如图1-27所示。 图1-27 下载安装 chrony (3)编辑 chrony 配置文件 vi /etc/chrony.conf 1. 注释掉: # pool 2.centos.pool.ntp.org iburst 2. 加入新的的时间服务器(可添加多个时间服务器): server ntp.aliyun.com iburst 图1-28 同步时间 (4)重启 chronyd 服务 systemctl restart chronyd (5)设置 chronyd 开机自启 systemctl enable chronyd (6)进行时间同步 chronyc makestep (7)查看时间是否同步 date 为了能够周期性执行时钟同步,我们需要加入定时计划任务,如需要每隔10分钟同步一下时钟,使用crontab -e命令,输入如下内容: 0-59/10 * * * * /usr/bin/chronyc makestep 具体操作如图1-29所示。 图1-29 加入定时任务 备注:3个节点执行一遍。 2.2.4 集群SSH免密登录 (1)各个节点SSH免密登录。SSH(Secure Shell)是可以在应用程序中提供安全通信的一个协议,通过SSH可以安全地进行网络数据传输,它的主要原理就是利用非对称加密体系,对所有待传输的数据进行加密,保证数据在传输时不被恶意破坏、泄露或者篡改。 但是Hadoop集群使用SSH不是用来进行数据传输的,而是在Hadoop集群启动和停止的时候,主节点需要通过SSH协议启动或停止从节点上面的进程。如果不配置SSH免密码免密登录,对Hadoop集群的正常使用没有任何影响,但是在启动和停止Hadoop集群的时候,需要输入每个从节点的密码。可以想象一下,当集群规模比较大的时候,比如达到成百上千节点的规模,如果每次都要分别输入集群节点的密码,这种方法肯定是不可取的,所以要对Hadoop集群进行SSH免密码免密登录的配置。 SSH免密码免密登录的功能跟用户密切相关,为哪个用户配置了SSH,那个用户就具有SSH免密码免密登录的功能,没有配置的用户则不具备该功能,这里选择为hadoop用户配置SSH免密码免密登录。 首先在控制台,使用su命令切换到hadoop用户的根目录,然后使用ssh-keygen -t rsa命令(ssh-keygen是秘钥生成器,-t 是一个参数,rsa 是一种加密算法)生成秘钥对(即公钥文件id_rsa.pub和私钥文件id_rsa)。 由于hadoop1先前已经配置过免密登录,我们直接从hadoop2开始配置(注意是在hadoop用户)配置hadoop2节点免密登录的步骤如下,首先使用su - hadoop命令切换至hadoop用户,然后使用rm -rf .ssh/删除克隆过来的ssh目录,最后通过ssh-keygen -t rsa生成秘钥,具体操作如图1-30所示。 图1-30 生成秘钥 (2)将公钥文件id_rsa.pub 中的内容拷贝到相同目录下的authorized_keys文件中。使用cd .ssh/ 进入ssh目录,使用cp id_rsa.pub authorized_keys复制秘钥到authorized_keys文件,最后通过cat authorized_keys查看秘钥是否复制成功,具体操作如图1-31。 图1-31 拷贝公钥到authorized_keys文件中 (3)切换到hadoop用户的根目录,然后为.ssh目录及文件赋予相应的权限。具体操作如图1-32所示。 图1-32 为.ssh目录及文件赋予相应的权限 (4)使用ssh命令登录hadoop2,第一次登录需要输入yes进行确认,第二次以后登录则不需要,此时表明设置成功,具体操作如图1-33所示。 图1-33 使用ssh登录hadoop2 (5)hadoop3节点按照hadoop2节点一样配置SSH免密登录即可。 (6)配置集群SSH免密登录。为了实现集群节点之间SSH免密登录,我们还需要将hadoop2和hadoop3的公钥id_ras.pub复制到hadoop1中的authorized_keys文件中,具体操作以及命令如图1-24、图1-35所示。 [hadoop@hadoop2 ~]$ cat ~/.ssh/id_rsa.pub | ssh hadoop@hadoop1 'cat >> ~/.ssh/authorized_keys' 图1-34 配置集群SSH免密登录(1) [hadoop@hadoop3 ~]$ cat ~/.ssh/id_rsa.pub | ssh hadoop@hadoop1 'cat >> ~/.ssh/authorized_keys' 图1-35 配置集群SSH免密登录(2) 然后将hadoop1中的authorized_keys文件分发到hadoop2和hadoop3节点,具体操作如图1-36、图1-37所示: [hadoop@hadoop1 .ssh]$ scp -r authorized_keys hadoop@hadoop2:~/.ssh 图1-36 authorized_keys文件分发到hadoop2 [hadoop@hadoop1 .ssh]$ scp -r authorized_keys hadoop@hadoop3:~/.ssh/ 图1-37 authorized_keys文件分发到hadoop3 然后hadoop1节点就可以免密登录hadoop2和hadoop3节点,如图1-38所示。 图1-38 免密登录hadoop2、hadoop3 2.2.5 集群脚本开发 (1)创建tools目录,并准备脚本与配置文件。 (2)首先使用mkdir tools命令创建tools目录,并用ls命令查看,具体操作如图1-39所示。 图1-39 创建tools目录 (3)通过FileZilla上传脚本文件到tools文件夹并使用ls命令查看,具体操作如图1-40、图1-41所示。 图1-40 上传脚本文件 图1-41 查看脚本文件 (4)然后使用vi deploy.conf配置脚本,具体内容为: hadoop1,master,all, hadoop2,slave,all, hadoop3,slave,all, 具体操作如图1-42所示。 图1-42 配置脚本文件 (5)使用 chmod u+x deploy.sh runRemoteCmd.sh命令给脚本授予可执行权限并使用ls命令查看,具体操作如图1-43所示。 图1-43 给脚本授予可执行权限 (6)使用vi ~/.bashrc命令配置脚本环境变量,具体操作如图1-44所示。 图1-44 配置脚本环境变量(1) (7)将内容修改为,如图1-45的内容。 图1-45 配置脚本环境变量(2) (8)使用source ~/.bashrc 使配置生效,具体操作如图1-46所示。 图1-46 配置生效 (9)最后测试运行集群脚本,使用touch words.log创建words.log文件,然后使用deploy.sh words.log /home/hadoop/app slave命令分发文件到hadoop2、hadoop3,具体操作如图1-47所示。 图1-47 测试运行集群脚本 实训三 Hadoop安装与配置(二) 一、实验目的 1.1 掌握搭建zookeeper集群的方法 1.2 掌握搭建完全分布式Hadoop集群的方法 二、实验内容 2.1搭建zookeeper集群 (1)下载并解压zookeeper 到官网(地址:http://Zookeeper.apache.org/releases.html# download)下载Zookeeper稳定版本的apache-zookeeper-3.8.4-bin.tar.gz安装包,然后上传至hadoop1 节点的/home/hadoop/app目录下并解压,具体操作如下所示。 #解压Zookeeper [hadoop@hadoop1 app]$ tar -zxvf apache-zookeeper-3.8.4-bin.tar.gz #创建Zookeeper软连接 [hadoop@hadoop1 app]$ ln -s apache-zookeeper-3.8.4-bin zookeeper (2)修改zoo.cfg配置文件 在运行 Zookeeper 服务之前,需要新建一个配置文件。这个配置文件习惯上命名为zoo.cfg,并保存在conf子目录中,其核心内容如下所示。 [hadoop@hadoop1 app]$ cd zookeeper [hadoop@hadoop1 zookeeper]$ cd conf/ [hadoop@hadoop1 conf]$ ls configuration.xsl logback.xml zoo_sample.cfg [hadoop@hadoop1 conf]$ cp zoo_sample.cfg zoo.cfg [hadoop@hadoop1 conf]$ vi zoo.cfg #数据目录需要提前创建 dataDir=/home/hadoop/data/zookeeper/zkdata #日志目录需要提前创建 dataLogDir=/home/hadoop/data/zookeeper/zkdatalog #访问端口号 clientPort=2181 #server.每个节点服务编号=服务器ip地址:集群通信端口:选举端口 server.1=hadoop1:2888:3888 server.2=hadoop2:2888:3888 server.3=hadoop3:2888:3888 具体操作步骤如图1-1所示。 图1-1 修改zoo.cfg配置文件 (3)同步zookeeper安装目录 使用scp命令将hadoop1节点的Zookeeper安装目录,整体同步到集群的hadoop2和hadoop3节点,具体操作如下所示。 方法1:使用远程拷贝命令scp,操作步骤如下。 [hadoop@hadoop1 app]$scp -r zookeeper-3.4.6 hadoop@hadoop2:/home/hadoop/app/ [hadoop@hadoop1 app]$scp -r zookeeper-3.4.6 hadoop@hadoop3:/home/hadoop/app/ 方法2:使用集群脚本,操作步骤如下。 [hadoop@hadoop1 app]$ deploy.sh apache-zookeeper-3.8.4-bin /home/hadoop/app/ slave 然后分别在hadoop2和hadoop3节点上创建Zookeeper软连接,具体操作如下所示。 [hadoop@hadoop2 app]$ ln -s apache-zookeeper-3.8.4-bin zookeeper [hadoop@hadoop3 app]$ ln -s apache-zookeeper-3.8.4-bin zookeeper (4)创建数据和日志目录 在集群各个节点创建Zookeeper数据目录和日志目录,需要跟zoo.cfg配置文件保持一致,具体操作如下所示。 #创建Zookeeper数据目录 方法1:三个节点分别创建。 [hadoop@hadoop1 app]$mkdir -p /home/hadoop/data/zookeeper/zkdata [hadoop@hadoop2 app]$mkdir -p /home/hadoop/data/zookeeper/zkdata [hadoop@hadoop3 app]$mkdir -p /home/hadoop/data/zookeeper/zkdata 方法2:使用集群脚本。 [hadoop@hadoop1 ~]$ runRemoteCmd.sh 'mkdir -p /home/hadoop/data/zookeeper/zkdata' all 执行效果如图1-2所示。 图1-2 创建zkdata目录 #创建Zookeeper日志目录 方法1: [hadoop@hadoop1 app] mkdir -p /home/hadoop/data/zookeeper/zkdatalog [hadoop@hadoop2 app] mkdir -p /home/hadoop/data/zookeeper/zkdatalog [hadoop@hadoop3 app] mkdir -p /home/hadoop/data/zookeeper/zkdatalog 方法2:(必须安装配置相应脚本工具) [hadoop@hadoop1 ~]$ runRemoteCmd.sh 'mkdir -p /home/hadoop/data/zookeeper/zkdatalog' all 执行效果如图1-3所示。 图1-3 创建zkdatalog目录 (5)创建各节点服务编号 分别在Zookeeper集群各个节点,进入/home/hadoop/data/zookeeper/zkdata目录,创建文件myid,然后分别输入服务编号,具体操作如下所示: #hadoop1节点 [hadoop@hadoop1 zkdata]$ touch myid [hadoop@hadoop1 zkdata]$ echo 1 > myid #hadoop2节点 [hadoop@hadoop2 zkdata]$ touch myid [hadoop@hadoop2 zkdata]$ echo 2 > myid #hadoop3节点 [hadoop@hadoop3 zkdata]$ touch myid [hadoop@hadoop3 zkdata]$ echo 3 > myid 注意:每个节点服务编号的值是一个整形数字且不能重复。 (6)启动Zookeeper集群服务 1)在集群各个节点分别进入Zookeeper安装目录,然后使用如下命令启动Zookeeper服务。 方法1: [hadoop@hadoop1 zookeeper]$ bin/zkServer.sh start [hadoop@hadoop2 zookeeper]$ bin/zkServer.sh start [hadoop@hadoop3 zookeeper]$ bin/zkServer.sh start 方法2: [hadoop@hadoop1 ~]$ runRemoteCmd.sh '/home/hadoop/app/zookeeper/bin/zkServer.sh start' all 执行效果如图1-4所示。 图1-4 启动zookeeper集群 2)Zookeeper集群启动一会之后,通过如下命令查看Zookeeper集群状态。 方法1: [hadoop@hadoop:1 zookeeper]$ bin/zkServer.sh status [hadoop@hadoop2 zookeeper]$ bin/zkServer.sh status [hadoop@hadoop3 zookeeper]$ bin/zkServer.sh status 方法2: [hadoop@hadoop1 ~]$ runRemoteCmd.sh '/home/hadoop/app/zookeeper/bin/zkServer.sh status' all 执行效果如图1-5所示。 图1-5 查看zookeeper集群状态 如果在Zookeeper集群中,其中一个节点为leader领导者,另外两个节点是follower跟随者,说明Zookeeper集群安装部署成功。 2.2搭建完全分布式Hadoop集群 2.2.1 HDFS集训搭建 (1)下载解压Hadoop 首先到官网(地址:https://archive.apache.org/dist/hadoop/common/)下载Hadoop稳定版本的安装包,然后上传至hadoop1节点下的/home/hadoop/app目录下并解压,具体操作如下所示。 [hadoop@hadoop1 app]$ tar -zxvf hadoop-3.3.1.tar.gz //解压 [hadoop@hadoop1 app]$ ln -s hadoop-3.3.1 hadoop //创建软连接 [hadoop@hadoop1 app]$ cd /home/hadoop/app/hadoop/etc/hadoop/ //切换到配置目录 (2)修改HDFS配置文件 1)修改hadoop-env.sh配置文件。hadoop-env.sh文件主要配置跟hadoop环境相关的变量,这里主要修改JAVA_HOME的安装目录,具体操作如下所示。 [hadoop@hadoop1 hadoop]$ vi hadoop-env.sh export JAVA_HOME=/home/hadoop/app/jdk 2)修改core-site.xml配置文件。core-site.xml文件主要配置hadoop的公有属性,具体需要配置的每个属性如下所示。 [hadoop@hadoop1 hadoop]$ vi core-site.xml fs.defaultFS hdfs://mycluster hadoop.tmp.dir /home/hadoop/data/tmp ha.zookeeper.quorum hadoop1:2181,hadoop2:2181,hadoop3:2181 3)修改hdfs-site.xml配置文件。hdfs-site.xml文件主要配置跟HDFS相关的属性,具体需要配置的每个属性如下所示。 [hadoop@hadoop1 hadoop]$ vi hdfs-site.xml dfs.namenode.name.dir file:/home/hadoop/data/dfs/name dfs.datanode.data.dir file:/home/hadoop/data/dfs/data dfs.journalnode.edits.dir /home/hadoop/data/journaldata/jn dfs.nameservices mycluster dfs.ha.namenodes.mycluster nn1,nn2,nn3 dfs.namenode.rpc-address.mycluster.nn1 hadoop1:8020 dfs.namenode.rpc-address.mycluster.nn2 hadoop2:8020 dfs.namenode.rpc-address.mycluster.nn3 hadoop3:8020 dfs.namenode.http-address.mycluster.nn1 hadoop1:9870 dfs.namenode.http-address.mycluster.nn2 hadoop2:9870 dfs.namenode.http-address.mycluster.nn3 hadoop3:9870 dfs.namenode.shared.edits.dir qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485/mycluster dfs.client.failover.proxy.provider.mycluster org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider dfs.ha.fencing.methods sshfence dfs.ha.fencing.ssh.private-key-files /home/hadoop/.ssh/id_rsa dfs.ha.automatic-failover.enabled true dfs.permissions.enabled false 4)配置workers文件。workers文件是根据集群规划配置DataNode节点所在的主机名,具体操作如下所示。 [hadoop@hadoop1 hadoop]$ vi workers hadoop1 hadoop2 hadoop3 5)向所有节点远程复制Hadoop安装目录。在hadoop1节点,切换到/home/hadoop/app目录下,将Hadoop安装目录远程复制到hadoop2和hadoop3节点,具体操作如下两种方法: 方法1: [hadoop@hadoop1 app]$scp -r hadoop-3.3.1 hadoop@hadoop2:/home/hadoop/app/ [hadoop@hadoop1 app]$scp -r hadoop-3.3.1 hadoop@hadoop3:/home/hadoop/app/ 方法2: [hadoop@hadoop1 hadoop]$ deploy.sh /home/hadoop/app/hadoop-3.3.1 /home/hadoop/app slave 然后在hadoop2和hadoop3节点上分别创建软连接,具体操作如下所示。 [hadoop@hadoop2 app]$ ln -s hadoop-3.3.1 hadoop [hadoop@hadoop3 app]$ ln -s hadoop-3.3.1 hadoop 备注:复制前删除使用rm -rf hadoop hadoop-3.3.1命令hadoop1、hadoop2上的hadoop hadoop-3.3.1目录 2.2.2 启动HDFS集群服务 (1)启动Zookeeper集群 在集群所有节点分别启动Zookeeper服务,具体操作如下所示。 方法1:分别在三个节点启动。 [hadoop@hadoop1 zookeeper]$ bin/zkServer.sh start [hadoop@hadoop2 zookeeper]$ bin/zkServer.sh start [hadoop@hadoop3 zookeeper]$ bin/zkServer.sh start 方法2:使用远程执行脚本。 [hadoop@hadoop1 hadoop]$ runRemoteCmd.sh '/home/hadoop/app/zookeeper/bin/zkServer.sh start ' all (2)启动Journalnode集群 在集群所有节点分别启动Journalnode服务,具体操作如下所示。 方法1:分别在三个节点启动。 [hadoop@hadoop1 hadoop]$sbin/hadoop-daemon.sh start journalnode [hadoop@hadoop2 hadoop]$sbin/hadoop-daemon.sh start journalnode [hadoop@hadoop3 hadoop]$sbin/hadoop-daemon.sh start journalnode 方法2:使用远程执行脚本。 [hadoop@hadoop1 hadoop]$ runRemoteCmd.sh '/home/hadoop/app/hadoop/sbin/hadoop-daemon.sh start journalnode' all (3)格式化主节点NameNode 在hadoop1节点(NameNode主节点)上,使用如下命令对NameNode进行格式化。 [hadoop@hadoop1 hadoop]$ bin/hdfs namenode -format / /n amenode 格式化 [hadoop@hadoop1 hadoop]$ bin/hdfs zkfc -formatZK //格式化高可用 [hadoop@hadoop1 hadoop]$bin/hdfs namenode //启动namenode (4)备用NameNode同步主节点元数据 在hadoop1节点启动NameNode服务的同时,需要在hadoop2,hadoop3节点(NameNode备用节点)上执行如下命令同步主节点的元数据。 [hadoop@hadoop2 hadoop]$ bin/hdfs namenode -bootstrapStandby [hadoop@hadoop3 hadoop]$ bin/hdfs namenode -bootstrapStandby (5)关闭Journalnode集群 hadoop2节点同步完主节点元数据之后,紧接着在hadoop1节点上,按下〈Ctrl+C〉组合键来结束NameNode进程,然后关闭所有节点上面的Journalnode进程,具体操作如下所示。 [hadoop@hadoop1 hadoop]$sbin/hadoop-daemon.sh stop journalnode [hadoop@hadoop2 hadoop]$ sbin/hadoop-daemon.sh stop journalnode [hadoop@hadoop3 hadoop]$ sbin/hadoop-daemon.sh stop journalnode (6)一键启动HDFS集群 如果上面操作没有问题,在hadoop1节点上,可以使用脚本一键启动HDFS集群所有相关进程,具体操作下所示。 [hadoop@hadoop1 hadoop]$ sbin/start-dfs.sh 注意:第一次安装HDFS需要对NameNode进行格式化,HDFS集群安装成功之后,以后使用start-dfs.sh脚本一键启动HDFS集群的所有进程即可。 2.2.3 HDFS集群测试 在浏览器中分别输入网址http://hadoop1:9870,以及http://hadoop3:9870通过 Web 界面查看hadoop1、hadoop3节点的NameNode的状态,结果如图1-6所示。该节点的状态为standby,表示HDFS不能通过hadoop1节点的NameNode对外提供服务。 图1-6 standby状态的NameNode界面 在浏览器中输入网址http://hadoop2:9870,通过Web界面查看hadoop2节点的NameNode的状态,结果如图2-54所示。该节点的状态为active,表示hadoop2节点的NameNode可以对外提供服务。 图1-7 active状态的NameNode界面 注意:某一时刻只能有一个NameNode节点处于active状态。 在hadoop1节点的/home/hadoop/app/hadoop目录下创建words.log文件,然后上传至 HDFS文件系统的/test目录下,检查 HDFS是否能正常使用,具体操作如下: #本地新建words.log文件 [hadoop@hadoop1 hadoop]$ vi words.log hadoop hadoop hadoop spark spark spark flink flink flink [hadoop@hadoop1 hadoop]$ hdfs dfs -mkdir /test #上传本地文件words.log [hadoop@hadoop1 hadoop]$ hdfs dfs -put words.log /test #查看words.log是否上传成功 [hadoop@hadoop1 hadoop]$ hdfs dfs -ls /test /test/words.log 如果上面操作没有异常,说明HDFS分布式集群搭建成功。 2.2.4 YARN集群配置 (1)修改 mapred-site.xml配置文件 mapred-site.xml 文件主要配置跟 MapReduce 相关的属性,这里主要将MapReduce的运行环境指定为YARN,核心配置如下所示。 [hadoop@hadoop1 hadoop]$ vi mapred-site.xml mapreduce.framework.name yarn (2)修改 yarn-site.xml配置文件 yarn-site.xml 文件主要配置跟YARN 相关的属性,核心配置如下所示。 [hadoop@hadoop1 hadoop]$ vi yarn-site.xml yarn.nodemanager.aux-services mapreduce_shuffle yarn.resourcemanager.ha.enabled true yarn.resourcemanager.cluster-id cluster-yarn1 yarn.resourcemanager.ha.rm-ids rm1,rm2,rm3 yarn.resourcemanager.hostname.rm1 hadoop1 yarn.resourcemanager.webapp.address.rm1 hadoop1:8088 yarn.resourcemanager.address.rm1 hadoop1:8032 yarn.resourcemanager.scheduler.address.rm1 hadoop1:8030 yarn.resourcemanager.resource-tracker.address.rm1 hadoop1:8031 yarn.resourcemanager.hostname.rm2 hadoop2 yarn.resourcemanager.webapp.address.rm2 hadoop2:8088 yarn.resourcemanager.address.rm2 hadoop2:8032 yarn.resourcemanager.scheduler.address.rm2 hadoop2:8030 yarn.resourcemanager.resource-tracker.address.rm2 hadoop2:8031 yarn.resourcemanager.hostname.rm3 hadoop3 yarn.resourcemanager.webapp.address.rm3 hadoop3:8088 yarn.resourcemanager.address.rm3 hadoop3:8032 yarn.resourcemanager.scheduler.address.rm3 hadoop3:8030 yarn.resourcemanager.resource-tracker.address.rm3 hadoop3:8031 yarn.resourcemanager.zk-address hadoop1:2181,hadoop2:2181,hadoop3:2181 yarn.resourcemanager.recovery.enabled true yarn.resourcemanager.store.class org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore yarn.nodemanager.env-whitelist JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLAS SPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME (3)向所有节点同步YARN配置文件 在hadoop1节点上修改完YARN相关配置之后,将修改的配置文件远程复制到hadoop2节点和hadoop3节点,具体操作如下所示。 #将 mapred-site.xml文件远程复制到hadoop2和hadoop3节点 方法1: [hadoop@hadoop1 hadoop]$scp -r mapred-site.xml hadoop@hadoop2:/home/hadoop/app/hadoop/etc/hadoop [hadoop@hadoop1 hadoop]$scp -r mapred-site.xml hadoop@hadoop3:/home/hadoop/app/hadoop/etc/hadoop 方法2: [hadoop@hadoop1 hadoop]$ deploy.sh mapred-site.xml /home/hadoop/app/hadoop/etc/hadoop/ slave #将yarn-site.xml文件远程复制到hadoop2和hadoop3节点 方法1: [hadoop@hadoop1 hadoop]$scp -r yarn-site.xml hadoop@hadoop2:/home/hadoop/app/hadoop/etc/hadoop [hadoop@hadoop1 hadoop]$scp -r yarn-site.xml hadoop@hadoop3:/home/hadoop/app/hadoop/etc/hadoop 方法2: [hadoop@hadoop1 hadoop]$ deploy.sh yarn-site.xml /home/hadoop/app/hadoop/etc/hadoop/ slave 2.2.5 启动YARN集群服务 YARN HA的实现依赖于Zookeeper,所以需要优先启动Zookeeper集群。因为前面操作已经启动Zookeeper集群,所以该步骤可以跳过。 启动YARN集群 在hadoop1节点上,使用脚本一键启动YARN集群,具体操作如下所示。 [hadoop@hadoop1 hadoop]$ sbin/start-yarn.sh 2.2.6 YARN集群测试 (1)Web界面查看YARN集群 在浏览器中输入网址http://hadoop1:8088(或者http://hadoop2:8088;http://hadoop3:8088),通过 Web 界面查看YARN集群信息,结果如图1-8所示。 图1-8 Web界面查看YARN集群 (2)YARN集群测试 为了测试YARN集群是否可以正常运行MapReduce程序,我们以Hadoop自带的wordcount示例来进行演示,具体操作如图1-9所示。 [hadoop@hadoop1 hadoop]$ bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /test/words.log /test/out 图1-9 YARN集群运行wordcount MapReduce作业在YARN集群执行状态结果,如图1-10所示。 图1-10 MapReduce作业运行状态 如果上述操作没有异常,最终作业的状态信息显示为SUCCEEDED,就说明MapReduce程序在YARN集群上面运行成功,从而说明Hadoop分布式集群已经全部搭建成功。 通过命令查询执行结果: [hadoop@hadoop1 hadoop]$ bin/hdfs dfs -cat /test/out/* 执行结果如图1-11所示。 图1-11MapReduce作业运行结果 实训四 Hive的安装部署(一) 一、实验目的 1.1 掌握搭建hive的方法 二、实验内容 2.1 Hive的安装部署 Hive是一个客户端工具并没有集群的概念,所以Hive的安装部署相对简单。一般情况下,由于Hive的元数据信息存储在第三方数据库中(如MySQL),所以在安装Hive之前需要首先安装MySQL数据库。由于硬件资源有限,我们从Hadoop集群中选择hadoop1节点来安装部署Hive客户端以及MySQL元数据库即可。 2.1.1安装MySQL MySQL数据库的安装有离线和在线安装两种方式,为了方便起见,我们选择在线安装方式。 (1)在线安装MySQL。在hadoop1节点上,使用yum命令在线安装MySQL数据库,具体操作如下所示。 [root@hadoop1 ~]# yum install mysql-server (2)启动mysql服务。MySQL数据库安装成功之后,通过命令行启动MySQL服务,具体操作如下所示。 [root@hadoop1 ~]# systemctl start mysqld [root@hadoop1 ~]# systemctl enable mysqld (3)设置MySQL root用户密码。MySQL刚刚安装完成,默认root用户是没有密码的,需要登录MySQL设置root用户密码,具体步骤如下。 因为MySQL默认没有密码,所以使用root用户可直接登录MySQL,输入密码时可按Enter键回车即可,具体操作如下所示。 [root@hadoop1 ~]# mysql -u root -p Enter password: ...... mysql> 在MySQL客户端设置root用户密码,具体操作如下所示。 mysql>alter user'root'@'localhost' identified with mysql_native_password by 'root'; 设置完MySQL root用户密码之后,退出并重新登录MySQL,用户名为:root,密码为:root。 [root@hadoop1 ~]# mysql -u root –p Enter password: mysql> 如果能成功登录MySQL,就说明MySQL 的root用户密码设置成功。 (4)创建Hive账户。 ①首先输入如下命令创建Hive账户,操作命令如下。 mysql>create user 'hive'@'hadoop1' identified by 'hive'; mysql>create user 'hive'@'%' identified by 'hive'; ②将MySQL所有权限授予Hive账户,操作命令如下所示。 mysql>GRANT ALL PRIVILEGES ON *.* TO 'hive'@'hadoop1' WITH GRANT OPTION; ③将MySQL所有权限授予Hive账户,并允许所有ip访问。 mysql>GRANT ALL PRIVILEGES ON *.* TO 'hive'@'%' WITH GRANT OPTION; ④通过命令使上述授权生效,操作命令如下所示。 mysql> flush privileges; ⑤如果上述操作成功,就可以使用Hive账户登录MySQL数据库,具体命令如下。 [root@hadoop1 ~] mysql -h hadoop1 -u hive -p ⑥创建hive数据库。 mysql> create database hive; 2.1.2安装Hive Hive的安装比较简单,因为Hive底层存储依赖HDFS,底层计算默认依赖MapReduce,所以我们选择一个节点部署Hive客户端,通过Hive客户端能将Hive 查询任务提交到Hadoop集群运行即可。 1.下载Hive 到官网(http://hive.apache.org/down/oads.html)下载 Hive 安装包apache-hive-3.1.3-bin.tar.gz,然后上传至hadoop1节点的/home/hadoop/app目录下。 2.解压Hive 在hadoop1节点上,使用解压命令解压Hive安装包,具体操作如下所示。 [hadoop@hadoop1 app]$ tar -zxvf apache-hive-3.1.3-bin.tar.gz 然后创建hive软连接,具体操作如下所示。 [hadoop@hadoop1 app]$ ln -s apache-hive-3.1.3-bin hive 3.修改hive-site.xml配置文件 进入hive的conf目录下发现hive-site.xml文件不存在,需要从默认配置文件复制一份,具体操作如下所示。 [hadoop@hadoop1 conf]$ cp hive-default.xml.template hive-site.xml 然后在hive-site.xml配置文件中,修改元数据库相关配置,修改内容如下所示。 [hadoop@hadoop1 conf]$ vi hive-site.xml #配置连接驱动名为com.mysql.jdbc.Driver javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver i #修改连接MySQL的URL javax.jdo.option.ConnectionURL jdbc:mysql://hadoop1:3306/hive?characterEncoding=UTF-8 #修改连接数据库的用户名和密码 javax.jdo.option.ConnectionUserName hive javax.jdo.option.ConnectionPassword hive 4.配置Hive环境变量 打开.bashrc文件,配置Hive环境变量,具体操作如下所示。 [hadoop@hadoop1 conf]$ vi ~/.bashrc 修改为如下内容: JAVA_HOME=/home/hadoop/app/jdk HADOOP_HOME=/home/hadoop/app/hadoop HIVE_HOME=/home/hadoop/app/hive CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:/home/hadoop/tools:$HIVE_HOME/bin:$PATH export JAVA_HOME CLASSPATH PATH HADOOP_HOME HIVE_HOME 保存并退出,并用命令source ~/.bashrc使配置文件生效。 5.添加MySQL驱动包 下载mysql-connector-j-8.0.31.jar(地址:http://central.maven.org/maven2/mysql/)驱动包,然后上传至Hive的lib目录下即可。 6.修改Hive相关数据目录 修改hive-site.xml配置文件,更改相关数据目录,具体配置如下所示。 [hadoop@hadoop1 conf]$ vi hive-site.xml hive.querylog.location /home/hadoop/app/hive/iotmp hive.exec.local.scratchdir /home/hadoop/app/hive/iotmp hive.downloaded.resources.dir /home/hadoop/app/hive/iotmp 7.启动Hive服务 第一次启动Hive服务需要先进行初始化,具体操作如下所示。 [hadoop@hadoop1 hive]$ bin/schematool -dbType mysql -initSchema 然后再执行bin/hive脚本启动Hive服务,具体操作如下所示。 [hadoop@hadoop1 hive]$ bin/hive hive>show databases; 如果上述操作没有问题,则说明Hive客户端已经安装成功。 实训五 Hive的安装部署(二) 一、实验目的 1.1 掌握部署hivesever2服务的方法 1.2掌握使用datagrip图形化客户端远程访问hive的方法 二、实验内容 2.1 hiveserver2服务部署 Hive的hiveserver2服务的作用是提供jdbc/odbc接口,为用户提供远程访问Hive数据的功能,例如用户期望在个人电脑中访问远程服务中的Hive数据,就需要用到Hiveserver2。 在远程访问Hive数据时,客户端并未直接访问Hadoop集群,而是由Hivesever2代理访问。由于Hadoop集群中的数据具备访问权限控制,所以此时需考虑一个问题:那就是访问Hadoop集群的用户身份是谁?是Hiveserver2的启动用户?还是客户端的登录用户? 2.1.1 hiveserver2部署 (1)Hadoop端配置 hivesever2的模拟用户功能,依赖于Hadoop提供的proxy user(代理用户功能),只有Hadoop中的代理用户才能模拟其他用户的身份访问Hadoop集群。因此,需要将hiveserver2的启动用户设置为Hadoop的代理用户,配置方式如下: 修改配置文件core-site.xml,然后记得分发三台机器,重启集群。 [hadoop@hadoop1 ~]$ cd /home/hadoop/app/hadoop/etc/hadoop [hadoop@hadoop1 hadoop]$ vi core-site.xml 增加如下配置: hadoop.proxyuser.hadoop.hosts * hadoop.proxyuser.hadoop.groups * hadoop.proxyuser.hadoop.users * (2)Hive端配置 在hive-site.xml文件中添加如下配置信息 [hadoop@hadoop102 conf]$ vim hive-site.xml hive.server2.thrift.bind.host hadoop1 hive.server2.thrift.port 10000 2.2使用Datagrip图形化客户端进行远程访问hive 2.2.1下载DataGrip 访问官方网址:https://www.jetbrains.com/datagrip/,效果如下图1-1所示: 图1-1 官方网址 如图1-2所示,点击右上角的Download按钮进入下载界面,可以看到DataGrip支持Windows、macOS、Linux三个系统,有30天的免费试用期,Windows版的PhpStorm包含.exe、.zip、.exe (ARM64)三种版本。 .exe:标准的可执行文件格式,适用 x86 架构的计算机和服务器。Intel和AMD的CPU下载这个版本。 .zip:绿色版,直接解压就能使用。 .exe (ARM64):专为 ARM64 架构设计的可执行文件格式,适用于基于 ARM 架构的设备。 图1-2 下载datagrip 2.2.2安装datagrip 双击下载的datagrip-2024.3.4.exe,进入DataGrip安装界面,点击下一步,效果如图1-3所示: 图1-3 安装欢迎界面 进入选择安装位置界面,默认安装在C:\Program Files\JetBrains\DataGrip 2024.3.3这个目录,可以点击右侧的浏览重新选择安装的目录,然后点击下一步,效果如图1-4所示: 图1-4 选择安装位置 进入安装选项界面,勾选创建桌面快捷方式,点击下一步,效果图1-5所示: 图1-5 勾选桌面快捷方式 进入选择开始菜单目录界面,点击下一步,效果如图1-6所示: 图1-6 选择开始菜单目录 进入安装中界面,等待DataGrip安装,效果如图图1-7所示: 图1-7 安装中界面 DataGrip安装完成后,进入DataGrip 安装程序结束界面,点击完成,效果图1-8所示: 图1-8完成安装 到此就完成了DataGrip的安装。 2.3.3配置DataGrip连接 1)启动hiveserver2 提示:必须先启动hadoop集群 [hadoop@hadoop1 hive]$ bin/hive --service hiveserver2 或者直接使用[hadoop@hadoop1 bin]$ hiveserver2 2)创建连接 如图1-9所示,新建一个hive的数据源。 图1-9 创建连接 3)配置连接属性 如图1-10所示,所有属性配置和Hive的客户端配置一致即可。初次使用,配置过程会提示缺少JDBC驱动,按照提示下载即可。 图1-10 配置连接属性 4)界面介绍 如图1-11所示,为datagrip的操作界面。 图1-11 datagrip操作界面 5)测试sql执行 如图1-12所示,输入sql代码,然后执行。 图1-12测试sql执行 注意:hive-3.1.2启动的时候,默认申请的JVM堆内存大小为256M,JVM堆内存申请太小,导致执行复杂的sql时经常会报错(如下图所示):java.lang.OutOfMemoryError: GC overhead limit exceeded,然后HiveServer2服务就异常了,因此最好调整一下HADOOP_HEAPSIZE这个参数。 解决方案: 进入hive下的conf目录,先把“hive-env.sh.template”拷贝一下,或者“mv”重命名 [hanxiao@hadoop102 conf]$ cp hive-env.sh.template hive-env.sh 然后vim命令修改“hive-env.sh” [hanxiao@hadoop102 conf]$ vim hive-env.sh 去掉第40行的“#”号(就可以把HADOOP_HEAPSIZE改为1024) export HADOOP_HEAPSIZE=1024 实训六 DDL数据定义 一、实验目的 1.1 掌握hvie对数据库的操作 1.2 掌握hive对数据表的操作 实验内容 2.1 Hive对数据库的操作 2.1.1创建数据库 Hive安装成功之后会存在一个默认的数据库default,为了方便管理不同业务数据,需要单独创建新的数据库。 (1)语法 创建数据库语法如下: CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name [COMMENT database_comment] [LOCATION hdfs_path] [WITH DBPROPERTIES (property_name=property_value, ...)]; (2)解释 创建数据库子句含义解释如下: SCHEMA 和 DATABASE:两者含义相同,用途一样。 IF NOT EXISTS:创建数据库时若有同名数据库存在,缺少该子句将抛出错误信息。 COMMENT:表示为数据库添加描述信息。 LOCATION:存放数据库数据目录。 WITH DBPROPERTIES:表示为数据库添加描述信息,如创建时间、作者等信息。 (3)示例 创建名为weather的数据库,具体操作如图1-1所示。 create database if not exists weather comment "天气数据库" location "/user/hive/warehouse/mydb" with dbproperties ('creator'='hyy','date'='2024-10-09'); 图1-1创建weather数据库 通过describe命令查看已建数据库的详情,具体操作如图1-2所示。 describe database extended weather; 图1-2查看weather数据库详情 2.1.2使用数据库 在Hive中可以根据不同的业务创建不同数据库,如果想对某个业务的数据进行操作,首先需要使用或者进入该数据库。 (1)语法 使用数据库的语法如下所示: USE database_name; (2)解释 使用数据库子句含义解释如下: USE:如果想使用哪个数据库,直接使用USE关键字即可。 (3)示例 使用已经创建的数据库weather,具体操作如图1-3所示。 use weather; 图1-3使用weather数据库 查看当前使用的是哪个数据库,具体操作如图1-4所示。 select current_database(); 图1-4查看所使用的数据库 2.1.3 查询数据库 (1)展示所有数据库 1)语法 SHOW DATABASES [LIKE 'identifier_with_wildcards']; 2)解释 like通配表达式说明:*表示任意个任意字符,|表示或的关系。 示例 show databases like 'weath*'; 操作如图1-5所示。 图1-5 展示数据库 (2)查看数据库信息 1)语法 DESCRIBE DATABASE [EXTENDED] db_name; 2)案例 图1-29 dataease主界面 2.4 dataease数据可视化分析步骤如下: 1. 创建数据源 (1)弹出图1-30所示界面,选择数据源,点击“+”,录入数据源相关信息,选择mysql数据库点击“保存”。 图1-30 添加数据源 创建数据集 如图10-43所示,选择数据集,点击“新建文件夹”,创建一个nev的文件夹。 图1-30创建文件夹 (2)使用如下语句创建统计地区访问用户量的前6条的数据集,具体操作如图1-31所示。 SELECT sid_total,sessionid_total,ip_total,area,yearinfo,monthinfo FROM visit_dws WHERE grouptype='1' LIMIT 6; 图1-31 创建统计地区访问用户量的数据集 (3)使用如下语句创建统计会话页面排行榜的数据集,具体操作如图1-32所示。 SELECT distinct sessionid_total,from_url,yearinfo,monthinfo FROM visit_dws WHERE grouptype='3' AND from_url!="" ORDER BY sessionid_total DESC 图1-32创建统计会话页面排行榜的数据集 (4)创建统计访问用户量的数据集,具体操作如图1-33所示。 SELECT distinct sid_total,sessionid_total,ip_total,yearinfo,monthinfo FROM visit_dws WHERE grouptype='4'; 图1-33创建统计访问用户量的数据集的数据集 (5)使用如下语句统计创建渠道访问用户量的数据集,具体操作如图1-34所示。 SELECT distinct sid_total,sessionid_total,ip_total,origin_channel,yearinfo,monthinfo FROM visit_dws WHERE grouptype='2'; 图1-34创建统计创建渠道访问用户量的数据集 选择仪表板,点击+,创建一个文件夹,名字为nev,然后在文件中创建一个名为教育大数据分析的仪表板,具体操作如图1-35所示。 图1-35 创建仪表板 4添加不同视图 添加指标卡 添加访问用户量指标卡,点击视图按钮,添加一个访问用户量的视图,数据集为用户访问量,具体操作如图1-36所示。 图1-36 添加访问用户量视图 如图1-37所示,点击下一步按钮,选择指标卡,确定。 图1-37 选择图表类型 将sid_total拓展到指标栏,得到如图1-38所示。 图1-38设置指标栏 更改显示名称为sid统计访问用户量,效果如图10-52所示。 图1-38 更改显示名称 在样式中隐藏标题,效果如图1-39所示。 图1-39 隐藏标题 最后得到指标卡,效果如图1-40所示。 图1-40 指标卡效果图 采用复制并修改相应属性的方式,得到session_id访问用户量,ip访问用户量指标卡,效果如图1-41所示。 图1-41 指标卡效果图 (2)添加地区访问用户量视图,数据集合选择为地区访问用户量,图标类型为明星表。效果如图1-42所示: 图1-42 添加地区访问用户量视图 将area、sid_total、sessionid_total、ip_total拖拽到数据列。修改字段显示名称分别为地区、按照sid统计量、sessionid统计量、ip_total统计量,最后调整视图的大小和位置,得到如图1-43所示效果图。 图1-43 地区访问用户量视图效果图 (3)添加会话页面排行榜视图,数据集合选择为会话页面排行榜,图标类型为基础柱状图,from_url、sessionid拖拽到指标,结果展示前6条。效果如图1-44所示。 图1-44 会话页面排行榜视图 (4)添加渠道访问用户统计视图,数据集合选择为渠道访问用户量,图标类型为基础柱状图,origin_channel、ip_total拖拽到指标,结果展示前6条,显示图例和标签的维度。效果如图1-45所示。 图1-45 渠道访问用户统计视图 (5)从其他中拖拽一个文字组件作为标题,标题内容为教育大数据分析平台,效果如图1-46所示。 图1-46 添加标题 (6)点击仪表板样式,选择仪表板主题为:智慧数据。得到效果图如图1-47所示: 图1-47 教育大数据分析平台大屏效果图 是否应为“本地文文件”,请作者加以核实。 (11)重启电脑, 开始使用 . 收获慢慢…… clxxix